首先在常量池找类符号引用,未找到则进行类加载
类加载遵循双亲委派模式
加载完成进行class规范验证
在方法区给静态变量分配内存空间,赋初始值(常量直接赋值)
将常量池中类符号引用转为直接引用、解析需要静态绑定的内容(所有不会被重写的方法都会被静态绑定)
验证、准备、解析(链接阶段),要做的就是将加载到JVM中的二进制字节流的类数据,合并到JVM运行时状态中
给静态变量赋值,执行静态代码块(static{...})
1、虚拟机为对象分配堆内存(指针碰撞、空闲列表)
2、设置对象头信息(类的元数据信息、对象的GC分代年龄信息)
3、给实例变量赋默认值
4、执行实例代码块({...})、构造器方法,先父类后子类
5、Child c = new Child(); 在虚拟机栈定义Child类型引用变量c,将堆区对象地址赋值给它
1、通过对象调用方法时,先在方法区中对象的类信息找,找不到去父类信息找
2、类加载时,创建一个虚方法表,每个方法只有一条记录,重写方法保留子类的,不需要往上搜索父类,优化调用效率
Copyright ©2010-2022 比特日记 All Rights Reserved.